Aller au contenu principal

Suivi et optimisation des coûts de stockage BigQuery

Contexte

Le but de ce document est de fournir une procédure permettant d'analyser et d'identifier les datasets et tables les plus coûteuses au niveau du stockage sur BigQuery.

Comme vu sur les rapports, on peut observer une très grosse augmentation du coût mensuel lié à BigQuery sur l'appli Oversight Dev depuis le début de l'année 2025. En filtrant les données de ces rapports, on s'aperçoit très clairement que la quasi-totalité des coûts engendrés est liée au stockage à long terme des données dans BigQuery.

Prérequis : Permissions IAM

Des requêtes SQL sont à utiliser pour identifier plus facilement les datasets et tables les plus volumineuses en regardant dans les métadonnées de ces dernières (INFORMATION_SCHEMA). Cependant, le rôle Propriétaire n'est pas suffisant pour l'exécution de ces requêtes et d'autres permissions sont nécessaires :

  • Administrateur BigQuery
  • Éditeur de données BigQuery
  • Lecteur de données BigQuery
  • Lecteur de métadonnées BigQuery

Étape 1 : Identifier les datasets les plus volumineux

La première étape consiste à obtenir une vue d'ensemble de tous les datasets du projet pour identifier celui ou ceux qui consomment le plus d'espace de stockage.

Procédure

Dans l'éditeur SQL de BigQuery, coller la requête suivante en veillant à utiliser la bonne région :

SELECT table_schema                                          AS dataset,
ROUND(SUM(active_logical_bytes) / POW(1024, 3), 2) AS go_logiques_actifs,
ROUND(SUM(long_term_logical_bytes) / POW(1024, 3), 2) AS go_logiques_long_terme,
ROUND(SUM(total_logical_bytes) / POW(1024, 3), 2) AS go_logiques_total
FROM `region-europe-west1`.INFORMATION_SCHEMA.TABLE_STORAGE
GROUP BY dataset
ORDER BY go_logiques_total DESC;

Résultats

Cette requête va alors retourner un tableau contenant tous les datasets triés par ordre décroissant de taille :

datasetgo_logiques_actifsgo_logiques_long_termego_logiques_total
PlanInsight9.256439.126448.37
Accounting0.1239.3439.46
Reservation0.0111.8911.91
E_Reputation1.140.261.41
Settings0.011.371.38
Logfire1.290.01.29
Airtable0.060.060.11
HotelsPrices0.00.10.1
Parcours_clients0.00.080.08
ProductServiceOrder0.020.00.02
Planning0.00.010.01
CompsetData0.00.00.0
MarketData0.00.00.0
Elium0.00.00.0
ProjectManagement0.00.00.0
Agent0.00.00.0
Opera_dev0.00.00.0
Total11.90 Go6492.23 Go6504.13 Go

Résultat obtenu le 01/10/2025

Ce tableau nous montre donc que le dataset PlanInsight est clairement la source principale à l'origine des surcoûts de stockage, avec plus de 6,5 To de données stockées à long terme.


Étape 2 : Identifier les tables les plus volumineuses du dataset

Maintenant que le dataset coupable est identifié, il faut "zoomer" à l'intérieur pour trouver les tables spécifiques qui occupent tout cet espace.

Procédure

Dans l'éditeur SQL de BigQuery, coller la requête suivante en veillant à utiliser la bonne région et en indiquant le dataset ciblé :

SELECT table_name                                       AS nom_de_la_table,
ROUND(active_logical_bytes / POW(1024, 3), 2) AS go_logiques_actifs,
ROUND(long_term_logical_bytes / POW(1024, 3), 2) AS go_logiques_long_terme,
ROUND(total_logical_bytes / POW(1024, 3), 2) AS go_logiques_total
FROM `region-europe-west1`.INFORMATION_SCHEMA.TABLE_STORAGE
WHERE table_schema = 'PlanInsight'
ORDER BY go_logiques_total DESC;

Résultats

Cette requête va retourner un tableau qui contient toutes les tables du dataset ciblé, triées par ordre décroissant de taille :

nom_de_la_tablego_logiques_actifsgo_logiques_long_termego_logiques_total
IncomeStatement_InvoiceValues...0.03997.813997.81
ProvisionalPlanVersion_EnvelopeValues...0.0769.14769.14
ProvisionalPlanVersion_PlanLineValues...0.0563.05563.05
UpdatedPlan_EnvelopeValues...0.0308.96308.96
UpdatedPlan_PlanLineValues...0.0204.78204.78
CashPlan_BudgetItemValues...0.0182.8182.8
IncomeStatement_BudgetItemValues...0.0180.01180.01
ProvisionalPlanVersion_CalculationBasisValues...0.073.0173.01
CashPlan_PlanLineValues...0.072.4172.41
IncomeStatement_PlanLineValues...0.071.3571.35
InvoiceAndPaymentValues...0.015.2615.26
Transaction...7.360.07.36
Invoice...1.620.01.62
LinkTagStats...0.00.370.37
Link...0.170.00.17
ProvisionalPlanVersion_EnvelopeValues...0.00.060.06
ProvisionalPlanVersion_PlanLineValues...0.00.040.04
Envelope...0.030.00.03
PlanLine_ProvisionalPlanVersion...0.020.00.02
IncomeStatement_InvoiceValues_historical...0.00.020.02
OriginalTransaction...0.020.00.02
BudgetItem...0.010.00.01
Contract...0.010.00.01
UpdatedPlan_PlanLineValues_historical...0.00.010.01
CashPlan_BudgetItemValues_historical...0.00.010.01
UpdatedPlan_EnvelopeValues_historical...0.00.010.01
CalculationBasis_ProvisionalPlanVersion...0.010.00.01
ConsolidatedPlanValuesKorner...0.00.010.01
ProvisionalPlanVersion_CalculationBasisValues...0.00.010.01
IncomeStatement_BudgetItemValues_historical...0.00.010.01
CashPlan_PlanLineValues_historical...0.00.00.0
CalculationBasis...0.00.00.0
IncomeStatement_PlanLineValues_historical...0.00.00.0
ProvisionalPlanVersion...0.00.00.0
ThirdParty...0.00.00.0
PlanLine...0.00.00.0
Hotel...0.00.00.0
ProvisionalPlan...0.00.00.0
Verification...0.00.00.0
Manual_transactions0.00.00.0
Users...0.00.00.0
Total9.25 Go6439.12 Go6448.37 Go

Résultat obtenu le 01/10/2025

Ce tableau nous montre donc que les tables les plus volumineuses du dataset PlanInsight sont les 7 premières qui représentent à elles seules environ 6.2To sur les 6.5To présents.